7.7 CXL Fabric Architecture

这一节引入了 CXL 架构的一项重大演进,旨在将其从一个节点内的互连技术,扩展为一个机柜级别 (rack-level) 的互连Fabric。

设计目标:

核心架构变更

系统宏观视图 (参考图 7-25) 一个典型的 CXL Fabric 系统由以下几部分组成:

Fabric Manager (FM) 的核心职责

FM 在 CXL Fabric 架构中扮演着至关重要的角色:

域和一致性

7.7.1 CXL Fabric Use Case Examples

  1. 7.7.1.1 机器学习加速器 (Machine-learning Accelerators)

这个用例展示了如何使用 CXL Fabric 连接多个机器学习加速器集群。

  1. 7.7.1.2 HPC/数据分析用例 (HPC/Analytics Use Case)

这个用例聚焦于高性能计算和大数据分析领域,强调主机间通信和大规模内存共享。

  1. 7.7.1.3 可组合系统 (Composable Systems)

这个用例展示了 CXL Fabric 如何构建灵活的、软件定义的“可组合系统”。

7.7.2 Global-Fabric-Attached Memory (G-FAM)

7.7.2.1 概述 (Overview)

该小节详细定义了 G-FAM(全局 Fabric 附加内存)这一核心概念的特性、行为和关键机制。

7.7.2.2 Host Physical Address View (主机物理地址视图)

这一节描述了从主机 (Host) 的角度来看,G-FAM 内存是如何被组织和访问的。

核心概念:Fabric 地址空间

分段与路由机制

这个路由过程的核心发生在主机所连接的边缘交换机上行端口 (PBR Edge USP) 中:

重要说明

7.7.2.3 G-FAM 容量管理 (G-FAM 容量管理)

这一节描述了 GFD (Global-Fabric-Attached Device) 内部的内存容量是如何被组织、划分和管理的。

管理方式和核心机制

设备介质分区 (Device Media Partitions, DMPs)

这是 G-FAM 容量管理的核心组织单位。

图 7-30 直观地展示了这种关系。图中一个 GFD 的 DPA 空间被分成了多个 DMP,每个 DMP 有不同的属性(例如,一个是 PM 介质,块大小 256M;另一个是 DRAM 介质,块大小 64M)。然后,主机 0 的不同 DC 区域(Region A, B, C, D)分别映射到这些不同的 DMP 上,从而让主机可以使用具有不同特性的内存分区。

与 LD-FAM 管理的主要区别

7.7.2.4 G-FAM Request Routing, Interleaving, and Address Translations (G-FAM 请求路由、交错和地址转换)

这是一个技术性非常强的部分,它详细描述了一个 G-FAM 请求从发起(由主机或对等设备)到被 GFD 设备处理,再到 GFD 发回响应(如窥探请求)的完整生命周期。这个过程的核心是两次关键的地址转换。

整个流程可以分为三个主要阶段,参考图 7-31:

阶段一:请求在边缘交换机中的处理(HPA -> DPID)

当一个主机或对等设备发出一个访问 G-FAM 的请求时,这个请求首先到达它所连接的边缘交换机(对于主机是 Edge USP,对于对等设备是 Edge DSP)。边缘交换机的首要任务是根据请求的主机物理地址 (HPA),确定目标 GFD 设备的端口 ID (DPID)

这个过程依赖两个关键的表格:

  1. FAST (Fabric Address Segment Table) - Fabric 地址段表:

    • 交换机首先使用 HPA 地址的一部分作为索引来查找 FAST 表。
    • FAST 表中的每个条目对应一个地址“段”,并包含以下信息:
    • 有效位 (Valid bit)
    • 交错方式 (Intlv): 定义了 GFD 的交错路数(例如 2-way, 4-way, ... , 256-way)。
    • 交错粒度 (Gran): 定义了交错的块大小(例如 256B, 4KB 等)。
    • DPID/IX: 如果不使用交错,这里直接就是目标 GFD 的 DPID。如果使用交错,这里则是一个指向 IDT 表的索引。
  1. IDT (Interleave DPID Table) - 交错 DPID 表:

    • 如果 FAST 条目指示了交错,交换机会根据 HPA、交错方式和粒度计算出具体的“路 (Way)”。
    • 然后,用 FAST 条目中的 DPID/IX 加上计算出的“路”,得到一个最终的索引,用这个索引去查找 IDT 表。
    • IDT 表中的条目即为最终要路由到的 GFD 的 DPID。

完成这个过程后,边缘交换机会将包含目标 DPID自身 SPID (源端口 ID)未经修改的原始 HPA 的请求发送到 CXL Fabric 中。

阶段二:请求在 GFD 设备中的处理(HPA -> DPA)

当 GFD 设备收到请求后,它需要执行第二次地址转换,将请求中的 HPA 转换为 GFD 内部的设备物理地址 (DPA)

  1. GDT (GFD Decoder Table) - GFD 解码器表:

    • GFD 使用请求中的 SPID(代表了请求者的身份)来访问其内部的 GDT 表,以选择专用于该请求者的解码器。
    • GFD 可以为每个请求者配置多达 8 个解码器。
  1. HPA 到 DPA 的转换:

    • GFD 的解码器并行工作,将请求的 HPA 与每个解码器的 HPA 范围进行比较。
    • 为了匹配,解码器会先从 HPA 中“移除”交错位,计算出一个偏移量。
    • 如果 HPA 成功匹配上一个唯一的解码器,GFD 就会根据该解码器的信息(如 DPA 基地址和计算出的偏移量)计算出最终的 DPA。
  1. 访问检查:

    • 在计算出 DPA 后,GFD 会使用其内部的动态容量访问保护机制(如 7.7.2.5 节所述的内存组)来检查该请求者是否有权限访问这个 DPA 地址。

阶段三:GFD 发回响应(窥探)的处理(DPA -> HPA)

当 GFD 需要向主机/对等设备发起一个窥探请求(如 BISnp)时,它需要执行上述过程的逆操作。

  1. DPA 到 HPA 的转换:

    • GFD 使用内部的 DPA 地址,在其 GDT 表中查找匹配的解码器。
    • 找到匹配项后,它会执行逆向转换,即通过 DPA 偏移量和交错信息,“重新插入”交错位,最终计算出原始的 HPA。
  1. 发送窥探请求:

    • GFD 将生成的窥探请求发送回 Fabric。此时,消息的 DPID 是原始请求者的 PID(由 GFD 的窥探过滤器记录),而 SPID 则是 GFD 自己的 PID
  1. 边缘交换机处理:

    • 边缘交换机收到窥探请求后,进行可选的 HPA 检查,然后移除 PTH(即 DPID/SPID),并将窥探请求转发给最终的主机/对等设备。

7.7.2.5 G-FAM Access Protection (G-FAM 访问保护)

这一节描述了为 G-FAM 这种全局共享内存设计的、至关重要的多层次安全访问保护机制,以确保只有被授权的主机或设备才能访问指定的内存区域。

三级分层保护模型 (参考图 7-32)

G-FAM 的访问保护是一个分层的体系,共有三级:

  1. 第一级保护(在主机/对等设备端):

    • 由请求者自己的页表 (page tables) 提供。
    • 这提供了操作系统层面的、细粒度的保护,可以将每个进程能访问的 Fabric 地址空间限制在主机/对等设备可访问范围的一个子集内。
  1. 第二级保护(在边缘交换机端):

    • 由 GAE (全局内存访问端点) 中的 GMV (Global Memory Mapping Vector) 提供。
    • 此外,边缘交换机中的 FAST/IDT 路由表也必须被正确编程,请求才可能被路由到 GFD。
  1. 第三级保护(在 GFD 设备端):

    • 由 GFD 设备自身实现,提供细粒度的保护。
    • 本节内容重点讲解的就是这第三级保护机制。

GFD 内部的访问保护机制 (参考图 7-33)

GFD 内部的保护机制设计精巧,以支持多达 4096 个 CXL 请求者。其核心是内存组 (Memory Groups) 的概念。

这个机制通过两个关键的表格协同工作来实现:

  1. MGT (Memory Group Tables) - 内存组表:

    • 功能: 为 GFD 中的每一个内存块分配一个内存组 ID (GrpID)
    • 结构: 每个设备介质分区 (DMP) 都有一个独立的 MGT。 MGT 中的每个条目对应 DMP 中的一个内存块。
    • 工作流程: 当一个带有 DPA(设备物理地址)的请求到达 GFD 时,GFD 首先确定 DPA 属于哪个 DMP,然后计算出块索引,并从对应的 MGT 中查找出这个内存块的 GrpID。
  1. SAT (SPID Access Table) - SPID 访问表:

    • 功能: 识别每个请求者被授权访问哪些内存组
    • 结构: SAT 表由请求者的 SPID (源端口 ID) 来索引。
    • 工作流程: GFD 使用请求中的 SPID 来查询 SAT 表,从而得到一个名为 GrpAccVec (Group Access Vector) 的向量。这个向量就是一个权限列表,其中的每一位对应一个内存组,如果某位为 1,则表示该请求者有权访问对应的内存组。

最终的访问检查

GFD 会并行执行上述两个查找操作。在获取到请求地址对应的 GrpID 和请求者身份对应的 GrpAccVec 后,GFD 会执行最后一步检查:

通过这种方式,GFD 确保了对每一块内存的访问都经过了请求者身份和内存归属的双重验证。

实现建议

7.7.2.6 Global Memory Access Endpoint (GAE, 全局内存访问端点)

GAE 是 CXL Fabric 架构中一个非常关键的组件,它扮演着主机与 G-FAM/GIM 资源之间的管理桥梁角色。

GAE 的定义和功能

GAE 的两种配置模式

主机边缘交换机 (Host Edge Switch) 的上行端口 (USP) 可以通过以下两种配置之一来暴露 GAE:

  1. 提供 LD-FAM 和 G-FAM/GIM 两种资源 (参考图 7-34)

    • 在这种模式下,主机不仅能看到传统的 CXL 交换机结构(包含 USP vPPB 和 DSP vPPB),还会看到一个额外的 GAE 端点。
    • 这个 GAE 用于配置 G-FAM/GIM 的访问,同时也可能包含管理本地 CXL 交换机(即 LD-FAM 资源)的命令。
  1. 仅提供 G-FAM/GIM 资源 (参考图 7-35)

    • 在这种模式下,主机看到的是一个极简的结构。
    • VCS 中没有实例化一个完整的 CXL 交换机,GAE 是呈现给主机的唯一 PCIe 功能。这种配置专用于访问 Fabric 资源。

GAE 的其他角色和机制

7.7.2.7 Event Notifications from GFDs (来自 GFD 的事件通知)

这一节描述了 GFD (全局 Fabric 附加内存设备) 是如何向主机报告事件的,其机制与传统设备不同。

7.7.3 Global Integrated Memory (GIM)

GIM,即全局集成内存,是 CXL Fabric 架构中与 G-FAM 并列的另一个核心概念,它主要用于实现跨主机域 (cross-domain) 的直接通信

GIM 的核心定义

主要用途与限制

在地址空间中的位置

7.7.3.1 Host GIM Physical Address View (主机 GIM 物理地址视图)

这一节描述了 GIM(全局集成内存)是如何被映射到主机的物理地址空间中,以及主机如何通过这个地址视图来访问 GIM。

核心机制:使用 Fabric 地址空间

图 7-37 非常直观地展示了这一点:

备用机制:绕过交换机解码器

7.7.3.2 Use Cases (用例)

这一节通过两个具体的例子,阐述了 GIM (全局集成内存) 在实际应用中如何实现跨域通信。

用例一:多主机 CXL 集群 (参考图 7-38)

用例二:跨域设备间通信 (参考图 7-39)

总结

GIM 构建了一个通用的框架,它利用同一套能力,支持了多种通信路径,包括:

7.7.3.3 Transaction Flows and Rules for GIM (GIM 的事务流和规则)

这一节是理解 GIM (全局集成内存) 工作原理的关键,它定义了 GIM 访问的具体流程和交换机/设备必须遵守的规则。虽然示例图使用了主机到主机的访问,但这套流程和规则同样适用于主机到设备、设备到设备以及设备到主机的通信。

两种 GIM 访问流程

文件描述了两种实现 GIM 访问的流程,主要区别在于是否使用边缘交换机的 FAST 解码器。

流程一:使用 FAST 解码器进行访问 (参考图 7-40) 这是标准的、基于 Fabric 地址空间的访问方式。

  1. 请求发起: Host 1 发出一个目标地址落在其 Fabric 地址空间内的 UIO 请求。

  1. 入口交换机处理:

    • 请求到达 Host 1 所连接的边缘交换机(入口交换机)。
    • 交换机的 FAST 解码器命中,确定了目标 Host 2 的 DPID (目标端口 ID)。
    • 交换机在生成 PBR 头部 (PTH) 时,会设置一个特殊的标志位 PTH.PIF=1
  1. Fabric 内路由: 请求在 CXL Fabric 中被路由到目标所在的边缘交换机(出口交换机)。

  1. 出口交换机处理:

    • 出口交换机收到请求后,检查到 PTH.PIF 位为 1。
    • 它会将请求中的源 PID (PTH.SPID) 放入一个名为 VendPrefixLO 的特殊 TLP 前缀中,然后将不带 PBR 头部的 TLP 转发给目标 Host 2。
  1. 返回完成包:

    • Host 2 处理完请求后,会返回一个 UIO 完成包。这个完成包中也包含了带有原始请求者 PID 的 VendPrefixLO 前缀。
    • 这个完成包被路由回 Host 1 所在的边缘交换机,交换机利用 VendPrefixLO 中的 PID 信息,将完成包正确地路由回 Host 1。

流程二:绕过 FAST 解码器进行访问 (参考图 7-41) 这是一种更直接的、通常用于受信任设备间的访问方式。

  1. 请求发起: Host 1(或一个受信任的设备)在发起 UIO 请求时,直接在 TLP 中包含了 VendPrefixLO 前缀,并在前缀中指定了目标 Host 2 的 PID。

  1. 入口交换机处理:

    • FM 必须预先将该入口端口配置为允许使用入口请求的 VendPrefixLO
    • 交换机收到这个带有前缀的请求后,绕过 FAST 地址解码,直接从 VendPrefixLO 中提取 PID 作为 DPID,然后设置 PTH.PIF=1 并将请求转发到 Fabric 中。
  1. 后续流程: 之后的路由和返回流程与流程一相同。

GIM 规则总结

为了实现上述流程,CXL 规范定义了一系列严格的规则:

7.7.5 HBR and PBR Switch Configurations (HBR 和 PBR 交换机配置)

这一节的核心内容是定义两种不同类型的 CXL 交换机,并阐述它们之间如何相互连接以及如何构建灵活的网络拓扑。

两种交换机类型

CXL 支持两种类型的交换机:

  1. HBR (Hierarchy Based Routing) - 基于层级的路由:
    • 这是对 CXL 2.0 规范中引入的、遵循传统 PCIe 树状层级结构进行路由的交换机的简称。
  1. PBR (Port Based Routing) - 基于端口的路由:
    • 这是为 CXL Fabric 织物架构引入的新型交换机,它使用 PID (端口 ID) 进行路由,可以构建更复杂的网络拓扑。

互连基本规则

文件列出了一系列关于这两种交换机如何与主机、设备等组件连接的基本规则,以确保系统可以正常工作:

图 7-42 展示了遵循上述规则的一些受支持的交换机配置示例,但并非全部。这些示例包括单个 PBR 交换机、多级 PBR 交换机、PBR 与 HBR 混合连接等多种拓扑。

PBR Fabric 拓扑的灵活性

使用 PBR 交换机时,CXL Fabric 的拓扑是非规定性的 (non-prescriptive),这意味着它可以自由地实现如胖树 (fat tree)、网状 (mesh)、环形 (ring) 等复杂的非树形拓扑。 然而,在这些包含环路 (loops) 的拓扑中,必须解决潜在的死锁 (deadlock) 问题。

网状拓扑示例 (图 7-43)

1746X1311/image.png

避免死锁的路由方案 (图 7-44)

1638X1057/image.png

7.7.6 PBR Switching Details

7.7.6.1 Virtual Hierarchies Spanning a Fabric (跨 Fabric 的虚拟层次结构)

这一节是理解 CXL Fabric 架构如何工作的核心关键。它解释了 CXL Fabric 如何通过“虚拟化”和“抽象化”的手段,向主机隐藏其底层的复杂物理拓扑。

核心理念:抽象化

主机看到的逻辑视图

从主机的角度来看,它最多能发现两层虚拟的“边缘交换机” (Edge Switches, ES):

  1. 主机边缘交换机 (Host ES):

    • 这是主机发现的第一个交换机,代表它所连接到的 Fabric 边缘。
    • 如果有其他端点设备 (EPs) 也物理连接在这个 PBR 交换机上,并且被绑定到该主机的虚拟层次结构 (VH) 中,那么这些设备看起来就像是直接连接在 Host ES 的 PPB 下。
  1. 下游边缘交换机 (Downstream ES):

    • Fabric Manager (FM) 可以在 Host ES 的 VCS 和一个远程的 PBR 交换机之间建立绑定连接。
    • 当这种绑定建立后,这个远程交换机会呈现一个 VCS,在主机看来,它就像是连接到了 Host ES 的一个虚拟下行端口 (vDSP) 上。

虚拟链路 (Virtual Link)

与 HBR 交换机的区别

图 7-45 的直观解释 2104X1035/image.png 这张图完美地诠释了物理拓扑和逻辑视图的区别:

7.7.6.2 跨 Fabric 的 PBR 消息路由

这一节定义了 PBR Fabric 中消息路由的两种主要方式和两种解码机制。

7.7.6.4 PBR 交换机 vDSP/vUSP 绑定与连接

这一节解释了 CXL Fabric 中一个核心的虚拟化机制:vDSP-vUSP 绑定。

7.7.6.5 PID 使用模型和分配

这一节阐述了 12 位的 PID 在 Fabric 中是如何被分配给不同组件以实现路由的。PID 由 FM 分配或通过静态方式初始化。

7.7.9 PBR Support for UIO Direct P2P to HDM (PBR 对 UIO 直通 HDM 的支持)

这一节描述了 CXL Fabric 架构中一个非常重要的功能:允许一个对等设备(Peer Device,通常指加速器)使用 UIO(无序 I/O)事务,直接读写另一个设备上的 HDM(主机管理的设备内存)。PBR 交换机为此提供了专门的高效路由机制。

核心目标与传统方式的对比

为了实现这一目标,PBR 交换机引入了两个关键的新组件:LDST 解码器基于 ID 的重路由器

1. LDST (LD-FAM Segment Table) 解码器的作用 (请求路径)

LDST 是实现“请求”从加速器高效路由到远端内存的关键。

2. ID-Based Re-Router (基于 ID 的重路由器) 的作用 (完成包路径)

ID-Based Re-Router 则是为了让“完成包”能从内存设备高效地返回给发起请求的加速器。

3. 访问保护机制 (LAV)

为了确保这种强大的 P2P 功能是安全的,规范定义了相应的保护机制。

7.7.12 PBR Fabric Management (PBR Fabric 管理)

这一节是理解 CXL Fabric 如何从零开始被构建、发现和管理的核心流程章节。它描述了 Fabric Manager (FM) 在整个 Fabric 生命周期的关键作用和操作步骤。

7.7.12.1 Fabric 启动和初始化

与单个 HBR 交换机类似,PBR Fabric 也有三种初始化模式:

7.7.12.2 PBR Fabric 发现

这是 FM 理解整个 Fabric 物理拓扑至关重要的一步,通常按以下流程进行:

  1. 声明所有权: FM 首先发现与自己直接相连的组件(通常是一个 PBR 交换机),并使用 Claim Ownership 命令声明自己是其主 FM。 这是一个强制步骤,PBR 设备只接受其主 FM 发出的大部分管理命令。

  1. 探索交换机端口: FM 作为主 FM 后,可以查询该交换机的能力和端口状态。 它使用 Get Physical Port StateGet PBR Link Partner Info 等命令来识别每个端口另一端连接的是什么类型的设备。

  1. 向外探索 (Fabric Crawl Out): 这是发现过程的核心。

    • FM 使用 Fabric Crawl Out 命令来管理连接在当前交换机端口远端的设备。
    • 初次通信: 对于一个尚未分配 PID 的远端设备,FM 会以端口号作为目标,将命令隧道化发送过去。
    • 分配 PID: FM 为这个远端设备分配一个唯一的 PID。
    • 更新路由: FM 更新本地交换机的路由表 (DRT),建立从这个新 PID 到对应端口的路由规则。
    • 后续通信: 完成路由更新后,FM 就可以直接以这个新分配的 PID 作为目标,继续使用 Fabric Crawl Out 命令与该远端设备通信。
  1. 重复: FM 重复步骤 1-3,直到整个 Fabric 中的所有 PBR 交换机和设备都被发现和分配了 PID。

7.7.12.3 分配和绑定 PID

7.7.12.4 通过 CDAT 报告 Fabric 路由性能

7.7.12.5 在 PBR Fabric 中配置 CacheID

7.7.12.6 动态 Fabric 变更

FM 和 PBR 交换机协同处理运行时的系统配置变更。

zood